import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-01-27
 * Time: 21:54
 */
public class Solution {
    // 思路:
    // 双指针/滑动窗口,这里使用了双指针
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> list=new ArrayList<>();
        // 记录每个字母出现的次数
        int[] standard=new int[26];
        int len2=p.length();
        for(int i=0;i<len2;i++){
            standard[p.charAt(i)-'a']++;
        }
        // 遍历长字符串进行查找
        int len1=s.length();
        int left=0;
        for(int right=0;right<len1;right++){
            char ch=s.charAt(right);
            standard[ch-'a']--;
            // 保证了, 每个字母的数目 <= 需要的数目
            while(standard[ch-'a']<0){
                standard[s.charAt(left)-'a']++;
                left++;
            }
            // 因为每个字母的数目 <=需要的数目
            // 并且 当前的字母数目 == 需要的数目
            // 而 窗口的长度为 n
            // 只有其他所有的字母数目 == 需要的数目才有可能使 长度为 n
            if(right-left+1==len2){
                list.add(left);
            }
        }
        return list;
    }
}
